package controlador;

/**
 *Responsavel pelas regras de negócio do usuario
 * Faz todo o tratamento de erro, exceções e mensagens
 */
import classes.Fornecedor;
import dao.DaoFornecedor;
import dao.IDaoFornecedor;
import erro.ConexaoException;
import erro.ConsultaException;
import erro.DaoException;
import erro.GeralException;
import java.sql.SQLException;
import java.util.ArrayList;

public class ControladorFornecedor {

    Fornecedor fornec = new Fornecedor();
    private IDaoFornecedor daoFornec = new DaoFornecedor();

    public ControladorFornecedor() {

        this.daoFornec = new DaoFornecedor();
    }

    /**
     * Validação dos campos do Usuario.
     * @param usu
     * @throws GeralException
     * @throws ConexaoException
     * @throws ConsultaException
     * @throws  SQLException
     */
    public void validarCNPJ(Fornecedor fornec) throws GeralException {
        if (fornec.getCnpjFornecedor().toString().trim().equals("")) {
            throw new GeralException("Informe o CNPJ do Fornecedor!");
        }
    }

    public void validar(Fornecedor fornec) throws GeralException {
        if (fornec.getNomeFornecedor().trim().equals("")) {
            throw new GeralException("Informe o Nome do Fornecedor!");

        } else {
            if (fornec.getCnpjFornecedor().toString().trim().equals("")) {
                throw new GeralException("Informe o CNPJ do Fornecedor!");
            }

            if (fornec.getFoneFornecedor().toString().trim().equals("")) {
                throw new GeralException("Informe o Telefone para Contato do Fornecedor!");
            }
        }
    }

    /**
     * Validação antes de inserir um novo registro no BD / Mensagem de inserção
     * @param fornec
     * @throws GeralException
     * @throws ConexaoException
     * @throws ConsultaException
     * @throws  SQLException
     */
    public void inserir(Fornecedor fornec) throws GeralException, ConsultaException, SQLException, ConexaoException {
        try {
            this.daoFornec.inserir(fornec);
        } catch (ConexaoException ex) {
            throw new GeralException("Nao foi possivel conectar-se ao banco de dados. Informe ao Administrador!");
        } catch (DaoException e) {
            throw new GeralException("Não foi possivel inserir o Fornecedor! Informe ao Administrador!");
        }
    }

    /**
     * Validação antes de alterar um registro no BD / Mensagem de alteração
     * @param fornec
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public void alterar(Fornecedor fornec) throws ConsultaException, ConexaoException, GeralException {
        try {
            this.daoFornec.alterar(fornec);
        } catch (ConexaoException ex) {
            throw new GeralException("Nao foi possivel conectar-se ao banco de dados. Informe ao Administrador!");
        } catch (DaoException e) {
            throw new GeralException("Não foi possível alterar o Fornecedor! Informe ao Administrador!");
        }
    }

    /**
     * Mensagem de exclusão de um registro no BD
     * @param prod
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public void deletar(Fornecedor fornec) throws ConexaoException, ConsultaException, GeralException {
        try {
            this.daoFornec.deletar(fornec);
        } catch (ConexaoException ex) {
            throw new GeralException("Nao foi possivel conectar-se ao banco de dados. Informe ao Administrador!");
        } catch (DaoException ex) {
            throw new GeralException("Não foi possivel deletar o Fornecedor! Informe ao Administrador!");
        }
    }

    public Fornecedor pesquisarFornecedor(Fornecedor fornec) throws GeralException, DaoException {
        try {
            this.daoFornec.pesquisar(fornec);
            if (fornec.getNomeFornecedor() == null) {
                throw new DaoException("Fornecedor não Encontrado!");
            }

        } catch (ConexaoException e) {
            throw new GeralException("Nao foi possivel conectar-se ao banco de dados. Informe ao Administrador!");
        }
        return (fornec);
    }

    public ArrayList<Fornecedor> pesquisarFornecedorFornec(Fornecedor fornec) throws ConexaoException, ConsultaException {
        return (ArrayList<Fornecedor>) this.daoFornec.pesquisarFornec(fornec);
    }

    public ArrayList<Fornecedor> listar(Fornecedor fornec) throws ConexaoException, ConsultaException {
        return (ArrayList<Fornecedor>) this.daoFornec.listar();
    }
}
